package com.promise.jokerdream.utils

import java.time.LocalTime
import java.time.format.DateTimeFormatter
import java.util.Calendar

/**
 * 时间工具类
 */
object TimeUtils {
    
    /**
     * 判断当前是否为周日时间
     * 周日时间：周日6-24点，周一0-6点
     */
    fun isSundayTime(): Boolean {
        val calendar = Calendar.getInstance()
        val dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK)
        val hour = calendar.get(Calendar.HOUR_OF_DAY)
        
        return when (dayOfWeek) {
            Calendar.SUNDAY -> hour >= 6  // 周日6点以后
            Calendar.MONDAY -> hour < 6   // 周一6点以前
            else -> false
        }
    }
    
    /**
     * 获取当前时间信息（用于调试）
     */
    fun getCurrentTimeInfo(): String {
        val calendar = Calendar.getInstance()
        val dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK)
        val hour = calendar.get(Calendar.HOUR_OF_DAY)
        val minute = calendar.get(Calendar.MINUTE)
        
        val dayName = when (dayOfWeek) {
            Calendar.SUNDAY -> "周日"
            Calendar.MONDAY -> "周一"
            Calendar.TUESDAY -> "周二"
            Calendar.WEDNESDAY -> "周三"
            Calendar.THURSDAY -> "周四"
            Calendar.FRIDAY -> "周五"
            Calendar.SATURDAY -> "周六"
            else -> "未知"
        }
        
        return "$dayName ${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}"
    }
    
    /**
     * 检查当前时间是否已过指定时间
     * @param targetTime 目标时间字符串，格式为 "HH:mm"
     * @return 是否已过指定时间
     */
    fun isTimePassed(targetTime: String): Boolean {
        return try {
            val currentTime = LocalTime.now()
            val target = LocalTime.parse(targetTime, DateTimeFormatter.ofPattern("HH:mm"))
            !currentTime.isBefore(target)
        } catch (e: Exception) {
            false // 时间解析错误时返回false
        }
    }
    
    /**
     * 检查当前时间是否等于指定时间（精确到分钟）
     * @param targetTime 目标时间字符串，格式为 "HH:mm"
     * @return 是否等于指定时间
     */
    fun isExactTime(targetTime: String): Boolean {
        return try {
            val currentTime = LocalTime.now()
            val target = LocalTime.parse(targetTime, DateTimeFormatter.ofPattern("HH:mm"))
            currentTime.hour == target.hour && currentTime.minute == target.minute
        } catch (e: Exception) {
            false // 时间解析错误时返回false
        }
    }
    
    /**
     * 检查是否到了挑战时间（考虑6点更新的跨天逻辑）
     * 每天6点更新，6:00-5:59算一天
     * @param targetTime 目标时间字符串，格式为 "HH:mm"
     * @return 是否到了挑战时间
     */
    fun isTimeToChallenge(targetTime: String): Boolean {
        return try {
            val currentTime = LocalTime.now()
            val challengeTime = LocalTime.parse(targetTime, DateTimeFormatter.ofPattern("HH:mm"))
            
            // 当前时间在6:00-23:59之间（当天）
            if (currentTime.hour in 6..23) {
                // 如果挑战时间在6:00-23:59之间，检查是否已过挑战时间
                if (challengeTime.hour in 6..23) {
                    return !currentTime.isBefore(challengeTime)
                }
                // 如果挑战时间在0:00-5:59之间，说明挑战时间在明天，今天还没到挑战时间
                else if (challengeTime.hour in 0..5) {
                    return false
                }
            }
            // 当前时间在0:00-5:59之间（属于前一天，因为6:00-5:59算一天）
            else if (currentTime.hour in 0..5) {
                // 如果挑战时间在0:00-5:59之间，检查是否已过挑战时间
                if (challengeTime.hour in 0..5) {
                    return !currentTime.isBefore(challengeTime)
                }
                // 如果挑战时间在6:00-23:59之间，说明挑战时间在昨天，已经过了挑战时间
                else if (challengeTime.hour in 6..23) {
                    return true
                }
            }
            
            false
        } catch (e: Exception) {
            false // 时间解析错误时返回false
        }
    }
}
